home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_535 / format / find.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  107 lines

  1. extern struct DosLibrary    *DOSBase;
  2.  
  3. UBYTE                 Pattern[1024],Name[1024];
  4. LONG                 Matches = 0;
  5. struct FileInfoBlock __aligned     FileInfo;
  6.  
  7. int CXBRK(VOID) { return(0); }
  8.  
  9. VOID __regargs
  10. FindFile(BPTR Dir)
  11. {
  12.     if(Examine(Dir,&FileInfo))
  13.     {
  14.         while(ExNext(Dir,&FileInfo))
  15.         {
  16.             if(SetSignal(0,0) & SIGBREAKF_CTRL_C)
  17.                 break;
  18.  
  19.             if(FileInfo . fib_DirEntryType > 0)
  20.             {
  21.                 BPTR FileLock;
  22.  
  23.                 if(FileLock = Lock(FileInfo . fib_FileName,ACCESS_READ))
  24.                 {
  25.                     BPTR OldDir = CurrentDir(FileLock);
  26.  
  27.                     FindFile(FileLock);
  28.  
  29.                     CurrentDir(OldDir);
  30.  
  31.                     UnLock(FileLock);
  32.                 }
  33.             }
  34.             else
  35.             {
  36.                 if(MatchPatternNoCase(Pattern,FileInfo . fib_FileName))
  37.                 {
  38.                     if(NameFromLock(Dir,Name,1024))
  39.                     {
  40.                         AddPart(Name,FileInfo . fib_FileName,1024);
  41.  
  42.                         Printf("%s\n",Name);
  43.  
  44.                         Matches++;
  45.                     }
  46.                 }
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. VOID
  53. main(int argc,char **argv)
  54. {
  55.     LONG    Result = RETURN_FAIL;
  56.     UBYTE    **Arg;
  57.  
  58.     if(DOSBase -> dl_lib . lib_Version < 37)
  59.         exit(RETURN_FAIL);
  60.  
  61.     if(Arg = (UBYTE **)AllocVec(sizeof(UBYTE *) * 2,MEMF_PUBLIC|MEMF_CLEAR))
  62.     {
  63.         struct RDArgs *ArgsPtr;
  64.  
  65.         if(ArgsPtr = ReadArgs("DIR/A,PATTERN/A",(LONG *)Arg,NULL))
  66.         {
  67.             BPTR OldDir,FileLock;
  68.  
  69.             if(FileLock = Lock(Arg[0],ACCESS_READ))
  70.             {
  71.                 if(ParsePatternNoCase(Arg[1],Pattern,1024) != -1)
  72.                 {
  73.                     OldDir = CurrentDir(FileLock);
  74.  
  75.                     FindFile(FileLock);
  76.  
  77.                     if(SetSignal(0,0) & SIGBREAKF_CTRL_C)
  78.                     {
  79.                         SetSignal(0,SIGBREAKF_CTRL_C);
  80.  
  81.                         Printf("\n*** BREAK: Find\a\n\n");
  82.                     }
  83.  
  84.                     if(!Matches)
  85.                         Result = RETURN_WARN;
  86.                     else
  87.                         Result = RETURN_OK;
  88.  
  89.                     CurrentDir(OldDir);
  90.                 }
  91.                 else
  92.                     Printf("Find: error parsing pattern \"%s\".\a\n",Arg[1]);
  93.  
  94.                 UnLock(FileLock);
  95.             }
  96.             else
  97.                 Printf("Find: unable to find directory \"%s\".\a\n",Arg[0]);
  98.  
  99.             FreeArgs(ArgsPtr);
  100.         }
  101.         else
  102.             PrintFault(IoErr(),"Find\a");
  103.  
  104.         FreeVec(Arg);
  105.     }
  106. }
  107.